#version 450 core

#extension GL_EXT_shader_16bit_storage : enable

struct S
{
    float16_t  x;
    f16vec2    y;
    f16vec3    z;
};

layout(column_major, std140) uniform B1
{
    float16_t  a;
    f16vec2    b;
    f16vec3    c;
    float16_t  d[2];
    S          g;
    S          h[2];
    int        j;
} b1;

layout(row_major, std430) buffer B2
{
    float16_t  o;
    f16vec2    p;
    f16vec3    q;
    float16_t  r[2];
    S          u;
    S          v[2];
    f16vec2    x[100];
    float16_t  w[];
} b2;

layout(row_major, std140) uniform B5
{
    float16_t  o;
    f16vec2    p;
    f16vec3    q;
    float16_t  r[2];
    S          u;
    S          v[2];
    f16vec2    x[100];
    float16_t  w[100];
} b5;

struct S2 {
    mat4x4 x;
    float16_t y;
    float z;
};

struct S3 {
    S2 x;
};

layout(row_major, std430) buffer B3
{
    S2 x;
} b3;

layout(column_major, std430) buffer B4
{
    S2 x;
    S3 y;
} b4;

void main()
{
    b2.o = b1.a;
    b2.p = f16vec2(vec3(b2.q).xy);
    b2.p = f16vec2(vec3(b5.q).xy);
    b2.r[0] = b2.r[0];
    b2.r[1] = b5.r[1];
    b2.p = b2.p;
    float x0 = float(b1.a);
    vec4 x1 = vec4(b1.a, b2.p, 1.0);
    b4.x.x = b3.x.x;
    b2.o = float16_t(vec2(b2.p).x);
    b2.p = b2.v[1].y;
    vec3 v3 = vec3(b2.w[b1.j], b2.w[b1.j+1], b2.w[b1.j+2]);
    vec3 u3 = vec3(b5.w[b1.j], b5.w[b1.j+1], b5.w[b1.j+2]);
    b2.x[0] = b2.x[0];
    b2.x[1] = b5.x[1];
    b2.p.x = b1.a;
    b2.o = b2.p.x;
    b2.p = f16vec2(vec2(1.0, 2.0));
    b2.o = float16_t(3.0);
    b2.o = float16_t(b1.a);
    b2.p = f16vec2(b1.b);
    b2.q = f16vec3(b1.c);
}

